Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

after-all

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

after-all

Execute several async functions and get a callback when they are all done

  • 2.0.2
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

after-all

build status

Sauce Test Status

Call several asynchronous functions and invoke a callback 'after all' of them are done.

Installation

You can install it with npm.

npm install after-all

Simple example

var afterAll = require('after-all');

var next = afterAll(function(err) {
	if (err) return console.log(err); // one of the asynchronous calls had an error
	console.log('Yay! Everything is done');
});

// The above inner function will only be called when all of these asynchronous calls are done

someAsynchronousCall1({foo:'bar'}, next());
someAsynchronousCall2({val:2}, next(function(err, res) {
	// If you want to do something with the returned value, you can pass a function
	if (err) return;
	console.log('This was returned: '+res);
}));

More complex example and sample use case

Imagine you have to create a dashboard page which has a list of customers a list products, the total amount of sales and some more information.

Now, the queries to get this information are independent, yet we tend to wait for one to be finished to start the next. We may be able to increase the performance by starting some of this queries at the same time and waiting for the callbacks.

We can use after-all to do something like this.


app.get('/dashboard.json', function(req, res) {
  var resp = {};
  var next = afterAll(function() {
    res.end(resp);
  });

  db.findCustomers(next(function(err, docs) {
    resp.customers = docs;
  }));

  var cb = next(); // wrapping the callback is optional
  db.findProducts(function(err, docs) {
    db.findProductsSales(function(sales) {
      resp.products = docs;
      resp.productsSales = sales;
      cb();
    });
  });

  db.findTodaySalesAmount(next(function(err, amount) {
    resp.todaySales = amount;
  }));

  db.findLastMonthSalesAmount(next(function(err, amount) {
    resp.lastMonthSales = amount;
  }));
});

As you can see, passing a callback to the next function is optional and it can be useful to not pass any when you are doing more than one sequetial async operations as in the example above.

Also notice that all the calls to next must be done on the same tick.

Error handling

If an error is passed as the first parameter to the next callback, the final callback will be called immediately and the error will be passed to it as the first argument.

License

MIT

FAQs

Package last updated on 24 Mar 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc